package com.fsy.main;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

/**
 * 通讯录类
 * @author Sylvia
 *
 */
public class AddressBook extends ArrayList<Person>{
	
		/**
		 * 创建空通讯录
		 */
	    public AddressBook(){
	    }
	    
	    /**
	     * 从文件中载入通讯录
	     * @param bookFile 文件名
	     */
	    public void loadAddressBook(File bookFile){
	        try {
	            FileReader fr=new FileReader(bookFile);
	            BufferedReader bfReader=new BufferedReader(fr);
	            String temp;
	            while((temp=bfReader.readLine())!=null){
	                String attribute[]=temp.split("\\|");//这一步将严格按照格式分割联系人信息，取得 姓名,电话号码,通讯地址	                
/*		            System.out.println(temp);
		            System.out.println(attribute[0]+"aaa"+attribute[1]+"aaa"+attribute[2]);*/
	                this.add(new Person(attribute[0],attribute[1],attribute[2])); //映射到通讯录对象中的联系人
	            }
	            bfReader.close();
	            fr.close();
	        } catch (Exception e) {
	            // TODO Auto-generated catch block
	            System.out.println("从文件'"+bookFile.getName()+"'载入通讯录失败!");
	            e.printStackTrace();
	        }
	         
	    }
	    
	    /**
	     * 保存通讯录到文件
	     * @param bookFile 文件名
	     */
	    public void saveAddressBook(File bookFile){
	        Person p;
	        try {
	            FileWriter fw=new FileWriter(bookFile);
	            BufferedWriter bfWriter=new BufferedWriter(fw);
	            Iterator<Person> itor=this.iterator();//迭代器
	            while(itor.hasNext()){
	                p=itor.next();//下一个联系人
	                p.saveMe(bfWriter);//调用联系人的保存功能
	                bfWriter.flush();
	            }
	        } catch (IOException e) {
	            // TODO Auto-generated catch block
	            System.out.println("写入通讯录文件"+bookFile.getName()+"失败！");
	            e.printStackTrace();
	        }
	         
	    }
	    
	    /**
	     * 新增联系人到通讯录列表
	     * @param p 联系人
	     */
	    public void addPerson(Person p){
	        this.add(p);//新增联系人
	    }
	    /**
	     * 从通讯录列表中删除联系人
	     * @param p 联系人
	     */
	    public void removePerson(Person p){
	        this.remove(this.indexOf(p));//删除联系人
	    }
	    /**
	     * 修改通讯录列表中联系人
	     * @param pOld 待改联系人
	     * @param pNew 新联系人
	     */
	    public void modifiedPerson(Person pOld,Person pNew){
	        this.add(this.indexOf(pOld), pNew);
	        removePerson(pOld);
	    }
	    /**
	     * 查找通讯录列表中联系人
	     * @param name 联系人姓名
	     * @return Person[] 联系人列表
	     */
	    public Person[] findPerson(String name){
	        Iterator<Person> itor=this.iterator();//迭代器
	        Person p;
	        
	        ArrayList<Person> finds=new ArrayList<Person>(0);//保存查找结果
	        while(itor.hasNext()){
	            p=itor.next();//查下一个联系人
	            String pName=p.getName();//取得联系人名字
	            
	            boolean b=name.equals(pName); //匹配联系人名字
	            if(b) finds.add(p);//存储搜索到的联系人
	        }
	        Person findp[]=new Person[finds.size()];
	        
	        return finds.toArray(findp);
	    }
	    /**
	     * 查看通讯录联系人数目
	     * @return int 联系人数目
	     */
	    public int getSize(){
	        return this.size();//返回通讯录联系人数目
	    }
	    /**
	     * 查看通讯录最后一个联系人信息
	     * @return String 最后一个联系人信息
	     */
	    public String getResult(){
	        Person p = null;

	    	Iterator<Person> itor=this.iterator();//迭代器
	        
	        while(itor.hasNext()){
		        p=itor.next();
	        }
	        return p.toString();
	    }
}
